#ifndef IGSLIB_IBURAM_H
#define IGSLIB_IBURAM_H

#include "igslib_common_use.h"

namespace igslib
{
    struct IBuRAM:public IComponent
	{
        /*!
         * 強制輸出緩衝區的資料到裝置上。
         */
        virtual void Flush()=0;
        /*!
         * 取得裝置記憶體總容量。
         * @return 記憶體總容量，單位為byte，若為-1表示是未知的。
         */
        virtual int GetSize()=0;
        /*!
         * 取得裝置名稱。
         * @return 裝置名稱。
         */
        virtual std::string GetName()=0;
        /*!
         * 設定裝置名稱。
         * @param a0 裝置名稱。
         */
        virtual void SetName(std::string)=0;
        /*!
         * 綁定指定大小的區塊，並傳回起始位址。
         * @param a0 區塊大小，單位為byte。
         * @return
         *     nullptr：創建失敗。
         *     other：實作指標。
         */
        virtual void* BindBlock(int)=0;
	};

    struct IBuRAMManager:public IManager<IBuRAM*>
    {
        /*!
         * 創建一個M01平台的BackupMemory。
         * @param a0 檔名。
         * @return
         *     nullptr：創建失敗。
         *     other：實作指標。
         */
        virtual IBuRAM* NewM01BuRAM()=0;
        /*!
         * 創建一個模擬用的BackupMemory。
         * @return
         *     nullptr：創建失敗。
         *     other：實作指標。
         */
        virtual IBuRAM* NewBuRAM()=0;
    };
};

extern "C"{
    igslib::IBuRAMManager* GetBuRAMManagerInstance();
};
#endif
